﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using JPSOFTWARE.BON.Modelos;
using JPSOFTWARE.BON.Repositorio;

namespace JPSOFTWARE.BON.Regra
{
    public class RnDistribuidora : RnBase
    {
        public DistribuidoraIncluirModel IncluirDistribuidora(DistribuidoraIncluirModel distribuidoraIncluirModel, int IdUsuario)
        {            
            DistribuidoraIncluirModel incluirDistribuidora = new DistribuidoraIncluirModel();

            try
            {
                distribuidoraIncluirModel.Cnpj = LimparMascara(distribuidoraIncluirModel.Cnpj);
                distribuidoraIncluirModel.Cep = LimparMascara(distribuidoraIncluirModel.Cep);
                distribuidoraIncluirModel.Telefone = LimparMascara(distribuidoraIncluirModel.Telefone);
                distribuidoraIncluirModel.Celular = LimparMascara(distribuidoraIncluirModel.Celular);

                if (ValidaCNPJ(distribuidoraIncluirModel.Cnpj))
                {
                    ValidarId(IdUsuario);

                    bool existeDistribuidora = FabricaRepositorio.RepositorioDistribuidora().VerificaSeExisteDistribuidora(distribuidoraIncluirModel.Cnpj);

                    if (!existeDistribuidora)
                    {
                        incluirDistribuidora = FabricaRepositorio.RepositorioDistribuidora().IncluirDistribuidora(distribuidoraIncluirModel, IdUsuario);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return incluirDistribuidora;
        }

        public bool VerificaSeExisteCNPJ(string cnpj)
        {
            string _cnpj = LimparMascara(cnpj);
            return FabricaRepositorio.RepositorioDistribuidora().VerificaSeExisteDistribuidora(_cnpj);
        }
   
        public List<DistribuidoraView> ListarDistribuidoraView(int IdUsuario)
        {
            List<DistribuidoraView> ListarDistribuidoraView = new List<DistribuidoraView>();

            ValidarId(IdUsuario);

            try
            {
                ListarDistribuidoraView = FabricaRepositorio.RepositorioDistribuidora().ListarDistribuidoraView(IdUsuario);

                foreach (var item in ListarDistribuidoraView)
                {
                    item.Cnpj = FormataString("##.###.###/####-##", item.Cnpj);
                    item.CEP = FormataString("#####-###", item.CEP);
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            return ListarDistribuidoraView;
        }
        public List<DistribuidoraView> ListarDistribuidoraView()
        {
            List<DistribuidoraView> ListarDistribuidoraView = new List<DistribuidoraView>();

            try
            {
                ListarDistribuidoraView = FabricaRepositorio.RepositorioDistribuidora().ListarDistribuidoraView();

                foreach (var item in ListarDistribuidoraView)
                {
                    item.Cnpj = FormataString("##.###.###/####-##", item.Cnpj);
                    item.CEP = FormataString("#####-###", item.CEP);
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            return ListarDistribuidoraView;
        }

        public List<DistribuidoraView> ListarDistribuidora(int IdDistribuidora)
        {
            List<DistribuidoraView> ListarDistribuidoraView = new List<DistribuidoraView>();

            ValidarId(IdDistribuidora);

            try
            {
                ListarDistribuidoraView = FabricaRepositorio.RepositorioDistribuidora().ListarDistribuidora(IdDistribuidora);

                foreach (var item in ListarDistribuidoraView)
                {
                    item.Cnpj = FormataString("##.###.###/####-##", item.Cnpj);
                    item.CEP = FormataString("#####-###", item.CEP);
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            return ListarDistribuidoraView;
        }        

        public List<DistribuidoraView> ListarDistribuidoraViewAdministrar()
        {
            List<DistribuidoraView> ListarDistribuidoraView = new List<DistribuidoraView>();

            try
            {
                ListarDistribuidoraView = FabricaRepositorio.RepositorioDistribuidora().ListarDistribuidoraViewAdministrar();

                foreach (var item in ListarDistribuidoraView)
                {
                    item.Cnpj = FormataString("##.###.###/####-##", item.Cnpj);
                    item.CEP = FormataString("#####-###", item.CEP);
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            return ListarDistribuidoraView;
        }

        public List<DistribuidoraCombo> CarregarDistribuidora(int IdUsuario)
        {
            ValidarId(IdUsuario);
            try
            {
                return FabricaRepositorio.RepositorioDistribuidora().CarregarDistribuidora(IdUsuario);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DistribuidoraView SelecionarDistribuidora(int? id, int IdUsuario)
        {
            DistribuidoraView DistribuidoraView = new DistribuidoraView();
            ValidarInt(id);
            try
            {
                DistribuidoraView = FabricaRepositorio.RepositorioDistribuidora().SelecionarDistribuidora(id, IdUsuario);
                if (DistribuidoraView != null)
                DistribuidoraView.Cnpj = FormataString("##.###.###/####-##", DistribuidoraView.Cnpj);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return DistribuidoraView;
        }

        public Retorno ExcluirDistribuidora(int id)
        {
            Retorno retorno = new Retorno();

            ValidarId(id);

            try
            {
                bool excluir = FabricaRepositorio.RepositorioDistribuidora().ExcluirDistribuidora(id);

                if (excluir)
                {
                    retorno.Sucesso = true;
                    retorno.Mensagem = Mensagens.MSG_005;
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = Mensagens.MSG_006;
                }
            }
            catch
            {
                retorno.Mensagem = Mensagens.MSG_006;
            }
            return retorno;
        }

        public DistribuidoraEditarModel EditarDistribuidoraAdministrar(int IdDistribuidora)
        {
            DistribuidoraEditarModel DistribuidoraDadosBancarioEditarModel = new DistribuidoraEditarModel();

            ValidarId(IdDistribuidora);           

            try
            {
                DistribuidoraDadosBancarioEditarModel = FabricaRepositorio.RepositorioDistribuidora().EditarDistribuidora(IdDistribuidora);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return DistribuidoraDadosBancarioEditarModel;
        }

        public DistribuidoraEditarModel EditarDistribuidora(int IdDistribuidora, int IdUsuario)
        {
            DistribuidoraEditarModel DistribuidoraDadosBancarioEditarModel = new DistribuidoraEditarModel();

            ValidarId(IdDistribuidora);
            ValidarId(IdUsuario);

            try
            {
                DistribuidoraDadosBancarioEditarModel = FabricaRepositorio.RepositorioDistribuidora().EditarDistribuidora(IdDistribuidora, IdUsuario);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return DistribuidoraDadosBancarioEditarModel;
        }

        public Retorno EditarDistribuidora(DistribuidoraEditarModel DistribuidoraEditarModel)
        {
            Retorno retorno = new Retorno();

            ValidarId(DistribuidoraEditarModel.IdDistribuidora);           
            DistribuidoraEditarModel.Cnpj = LimparMascara(DistribuidoraEditarModel.Cnpj);
            DistribuidoraEditarModel.Telefone = LimparMascara(DistribuidoraEditarModel.Telefone);
            DistribuidoraEditarModel.Celular = LimparMascara(DistribuidoraEditarModel.Celular);
            DistribuidoraEditarModel.Cep = LimparMascara(DistribuidoraEditarModel.Cep);            

            try
            {
                if (ValidaCNPJ(DistribuidoraEditarModel.Cnpj))
                {
                    retorno.Sucesso = FabricaRepositorio.RepositorioDistribuidora().EditarDistribuidora(DistribuidoraEditarModel);
                    if (retorno.Sucesso)
                    {
                        retorno.Mensagem = Mensagens.MSG_005;
                    }
                    else
                    {
                        retorno.Sucesso = false;
                        retorno.Mensagem = Mensagens.MSG_006;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }

        public List<EstadosView> ListarEstados()
        {            
            try
            {
                return FabricaRepositorio.RepositorioDistribuidora().ListarEstados();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<CidadeView> ListarCidades(string estado)
        {
            try
            {
                return FabricaRepositorio.RepositorioDistribuidora().ListarCidades(estado);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DistribuidoraView SelecionarDistribuidora(int IdDistribuidora)
        {
            DistribuidoraView DistribuidoraView = new DistribuidoraView();

            ValidarInt(IdDistribuidora);

            try
            {
                DistribuidoraView = FabricaRepositorio.RepositorioDistribuidora().SelecionarDistribuidora(IdDistribuidora);
                DistribuidoraView.Cnpj = FormataString("##.###.###/####-##", DistribuidoraView.Cnpj);				
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return DistribuidoraView;
        }

        public DistribuidoraEditarModel EditarDistribuidora(int IdDistribuidora)
        {
            DistribuidoraEditarModel DistribuidoraDadosBancarioEditarModel = new DistribuidoraEditarModel();

            ValidarId(IdDistribuidora);            

            try
            {
                DistribuidoraDadosBancarioEditarModel = FabricaRepositorio.RepositorioDistribuidora().EditarDistribuidora(IdDistribuidora);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return DistribuidoraDadosBancarioEditarModel;
        }

        public List<DistribuidoraCombo> CarregarDistribuidora()
        {            
            try
            {
                return FabricaRepositorio.RepositorioDistribuidora().CarregarDistribuidora();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public Retorno ExcluirDistribuidoraAdministrar(int id)
        {
            Retorno retorno = new Retorno();

            ValidarId(id);

            try
            {
                bool excluir = FabricaRepositorio.RepositorioDistribuidora().ExcluirDistribuidoraAdministrar(id);

                if (excluir)
                {
                    retorno.Sucesso = true;
                    retorno.Mensagem = Mensagens.MSG_005;
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = Mensagens.MSG_006;
                }
            }
            catch
            {
                retorno.Mensagem = Mensagens.MSG_006;
            }
            return retorno;
        }

        public DistribuidoraView SelecionarDistribuidoraAdministrar(int id)
        {
            DistribuidoraView DistribuidoraView = new DistribuidoraView();
            ValidarInt(id);
            try
            {
                DistribuidoraView = FabricaRepositorio.RepositorioDistribuidora().SelecionarDistribuidoraAdministrar(id);
                if (DistribuidoraView != null)
                    DistribuidoraView.Cnpj = FormataString("##.###.###/####-##", DistribuidoraView.Cnpj);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return DistribuidoraView;
        }
    }
}
